<?php

/**
 * cotizacion actions.
 *
 * @package    SAC_CLonsa
 * @subpackage cotizacion
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class cotizacionActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
    $this->redirect('cotizacion', 'lista');
  }

  public function executeLista(sfWebRequest $peticion)
  {
    $this->cont=1;
    $this->solicitudes = ItemOsPeer::getItemsPorEstadosSolicitudId(4, 8); //cuatro es el id del EstadoSolicitud "Aprobada"

    if ( $peticion->isMethod('post'))
    {
        $this->forward('cotizacion','proveedores');
    }
  }

  public function executeProveedores(sfWebRequest $peticion)
  {
    if ( $peticion->isMethod('post') && is_array( $peticion->getParameter('sel_solicitudes_elegidas') ) ) // Para saber si se ha llegado a esta página por medio de una petición post
    {
        $cont = 0;
        $arregloIdItems = $peticion->getParameter('sel_solicitudes_elegidas');
        foreach( $arregloIdItems as $id  )
        {
            $arrayObjetosItems[$cont++] = ItemOsPeer::getItemOrdenServicioPorId( $id );
        }
        $this->arrayItems = $arrayObjetosItems;
    }
    else
    {
        $this->redirect('cotizacion/lista');
    }
  }

  public function executeConfirmar(sfWebRequest $peticion)
  {
    if ( $peticion->isMethod('post') && !is_null($peticion->getParameter('input_solicitudId'))) // Para saber si se ha llegado a esta página por medio de una petición post
    {
        /* if $peticion->hasParameter('input_solicitudId') para asegurar que existe el parámetro id pues la página puede venir si este prámetros a veces */
        /* if !$peticion->hasParameter('confirmacion'). Si se cumple esta condición, significa que el post no viene desde la página confirmación */
        $idSolicitudesAux = $peticion->getParameter('input_solicitudId');

        $this->solicitud_ya_cotizada = null;
        /* Este foreach se utiliza para porder verificar que las solicitudes que se están enviando para cotizar no estén ya cotizadas*/        
        foreach( $idSolicitudesAux as $id )
        {
            $solicitud_ya_cotizada = ItemOsPeer::getItemOrdenServicioPorId( $id );
            if( $solicitud_ya_cotizada->getEstadoSolicitudId()==9 )
            {
                $tipo_error = 1;
                break;
            }
            $solicitud_ya_cotizada = null;
        }
        /* end foreach */

        if( !is_null( $solicitud_ya_cotizada ) )
        {
            $this->tipo_error = $tipo_error;
            $this->solicitud_ya_cotizada = $solicitud_ya_cotizada;
        }
        elseif($peticion->hasParameter('input_solicitudId') && !$peticion->hasParameter('confirmacion') ) // Para saber si el post viene de la página correspondiente
        {
            /* Creación tabla cotización*/
            $cotizacion = new Cotizacion();
            $cotizacion->setEstadoCotizacionId(1);
            $cotizacion->setsfGuardUser( $this->getUser()->getGuardUser() );
            $cotizacion->setFechaCreacion( time() );
            

            /* Se extrae el id de la última talba cotización insertada */
            if( CotizacionPeer::doSelectOne(new Criteria()) )
            {
               $ultimoId = CotizacionPeer::getUltimoId();
            }
            else
            {
                $ultimoId = 0;
            }

            $this->idCotizacion = $ultimoId+1;

            $idSolicitudes = $peticion->getParameter('input_solicitudId');
            $this->idSolicitudes=$idSolicitudes;

            $proveedores = array();
            $precio_proveedores = array();
            $moneda_proveedores = array();
            //$total_precio_proveedores = array();
            $fecha_entrega_proveedores = array();
            $forma_pago_proveedores = array();

            $cont=0;
            /**** Por cada Solicitud ****/
            foreach($idSolicitudes as $id){
                $proveedores[$cont] = $peticion->getParameter( 'input_nombre_proveedor'.($cont+1) );
                $rut_proveedores[$cont] = $peticion->getParameter( 'input_rut_proveedor'.($cont+1) );
                $precio_proveedores[$cont] = $peticion->getParameter( 'input_precio'.($cont+1) );
                $moneda_proveedores[$cont] = $peticion->getParameter( 'input_moneda'.($cont+1) );
                /*acá debe ir el contacto*///$total_precio_proveedores[$cont] = $peticion->getParameter('input_total'.($cont+1));
                $fecha_entrega_proveedores[$cont] = $peticion->getParameter( 'input_fecha_entrega'.($cont+1) );
                $forma_pago_proveedores[$cont] = $peticion->getParameter('input_forma_pago'.($cont+1));
                $observaciones_proveedores[$cont] = $peticion->getParameter('textarea_obervaciones'.($cont+1));

                //$numProvPorSolcitud[$cont] = $peticion->getParameter('numProveedores'.($cont+1));
                $solicitud = ItemOsPeer::getItemOrdenServicioPorId( $id );
                /* Si la solicitud (itemOs) ya ha sido cotizada se redirecciona a */
                if( $solicitud->getEstadoSolicitudId() == 10 ){
                    $this->redirect('cotizacion/lista');
                }
                $solicitud->setEstadoSolicitudId(10); // Se cambia estado a estado Cotizada
                $arrayObjetosItems[$cont] = $solicitud;

                /* Se crea un nueva solicitud cotizada */
                $solicitudCotizada = new SolicitudCotizada();
                $solicitudCotizada->setItemOs($solicitud);
                $solicitudCotizada->setCotizacion($cotizacion);
                $solicitudCotizada->save();
                $idsSolicitudesCotizadas[$cont] = $solicitudCotizada->getId();

                $cont++;
            }

            $cont2=0;            
            while($cont2 < $cont)
            {
                $cont3=0;
                /**** Se guarda cada Proveedor cotizado para la Solicitud  de id $idsSolicitudesCotizadas[$cont2] ****/
                foreach( $proveedores[$cont2] as $proveedor )
                {
                    $proveedorCotizado = new ProveedorSolicitudCotizada();
                    $proveedorCotizado->setSolicitudCotizadaId($idsSolicitudesCotizadas[$cont2]); //Solicitud Cotizada
                    $proveedorCotizado->setNombreProveedor( $proveedor ); //Nombre Proveedor
                    $proveedorCotizado->setPrecio( $precio_proveedores[$cont2][$cont3] ); //Precio Unitario
                    $proveedorCotizado->setUnidadItemOsId(1);
                    $proveedorCotizado->setTipoMonedaId(1); //Tipo Moneda
                    $proveedorCotizado->setFormaPagoId(1); //Forma de pago
                    /*acá tiene que ir el nombre contacto*/
                    $proveedorCotizado->setContactoId(1);  //setTotal($total_precio_proveedores[$cont2][$cont3]);
                    $proveedorCotizado->setFechaEntrega( time() );

                    $rut = $rut_proveedores[$cont2][$cont3];
                    /*ingreso proveedor*/
                    if( ProveedorPeer::existeNombreORut( $proveedor, $rut ) )
                    {
                        /*Si el proveedor cotizado ya existe, solo se referencia el proveedorCotizado a éste mediante el id del proveedor*/
                        $proveedorCotizado->setProveedorId( ProveedorPeer::getIdporNombre( $proveedor ) );
                    }
                    elseif( $proveedor != '' )
                    {
                        /*Se crea un nuevo registro para el nuevo proveedor si es que no existe*/
                        $prov = new Proveedor();
                        $prov->setNombre($proveedor);
                        $prov->setRut($rut);
                        $prov->setSugerido(2); // 2 significa que es un nuevo proveedor agregado en la etapa de cotización
                        $prov->save();

                        $proveedorCotizado->setProveedorId( ProveedorPeer::getIdporNombre( $proveedor ) );
                        //$this->bandera = 'else';
                    }
                    /*fin ingreso proveedor*/

                    $proveedorCotizado->save();
                    $cont3++;
                }

                $cont2++;
            }


            $this->arraySolicitudes = $arrayObjetosItems;
            $this->proveedores = $proveedores;
            $this->precio_proveedores = $precio_proveedores;
            $this->moneda_proveedores = $moneda_proveedores;
            //$this->total_precio_proveedores = $total_precio_proveedores;
            $this->fecha_entrega_proveedores = $fecha_entrega_proveedores;
            $this->forma_pago_proveedores = $forma_pago_proveedores;
            $this->observaciones_proveedores = $observaciones_proveedores;
            //$this->numProvPorSolcitud = $numProvPorSolcitud;

            $cotizacion->save();
        }
        else
        {
            $this->redirect('cotizacion','lista');
        }

    }//fin if( $peticion->isMethod('post') )
    else
    {
        $this->redirect('cotizacion/lista');
    }
  }

  public function executePara_ord_compra_int(sfWebRequest $peticion)
  {
      if ( $peticion->isMethod('post') && is_array( $peticion->getParameter('sel_solicitudes_elegidas') ) ) // Para saber si se ha llegado a esta página por medio de una petición post
      {
          $this->bandera = 1;// Para mostrar a la vista que muestra las solicitudes que serán marcadas para una Ordne de Compra Interna, y la petición de confirmación
          $cont = 0;
          $arregloIdItems = $peticion->getParameter('sel_solicitudes_elegidas');
          foreach( $arregloIdItems as $id  )
          {
              $arrayObjetosItems[$cont++] = ItemOsPeer::getItemOrdenServicioPorId( $id );
          }
          $this->arrayItems = $arrayObjetosItems;
      }
      elseif ( $peticion->isMethod('post') && is_array( $peticion->getParameter('sel_solicitudes_para_ord_compra_int') ) )
      {
          $this->bandera = 2;// Para mostrar la vista de aviso de envío de solicitudes a Orden de Compra Interna
          $cont = 0;
          $arregloIdItems = $peticion->getParameter('sel_solicitudes_para_ord_compra_int');
          foreach( $arregloIdItems as $id  )
          {
              $solicitud = ItemOsPeer::getItemOrdenServicioPorId( $id );
              $solicitud->setEstadoSolicitudId(6); // Estado: Para Orden de Compra Interna
              $solicitud->save();
              $arrayObjetosItems[$cont++] = $solicitud;
          }
          $this->arrayItems = $arrayObjetosItems;
      }
      else
      {
          $this->redirect('cotizacion/lista');
      }
  }

}